// ISecurityUnitManager.aidl
package com.sgcc.pda.hw;
import com.sgcc.pda.hw.ReturnResult;
// Declare any non-default types here with import statements

interface ISecurityUnitManager {

    /**
     * 安全单元初始化
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult init();


    /**
     * 安全单元同步
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult sync();

    /**
     * 获取安全单元工作状态
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：status      返回-状态字
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult getStatus();

    /**
     * 获取操作员卡号,业务卡号以及权限
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：operator      操作员卡号
     *                                              1：operatorPower 权限
     *                                              2：cover         掩码信息
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult getUserCodeAndPermission();

    /**
     * 注销任务标识
     *
     *@param taskSign 任务标识
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult logOffTaskSign(String taskSign);

    /**
     * 注册任务标志
     *
     * @param taskSign 任务标识
     * @param operator 操作员卡号
     * @param cipher   任务标识数据密文
     * @param mac      密文数据MAC
     * @param randomM  身份认证时返回的认证随机数
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult registerHostCreatTaskSign(String taskSign, String operator, String cipher, String mac, String randomM);

    /**
     * 红外认证获取随机数1
     *
     * @param cardType 卡类型
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：random1  随机数1
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getRandom1(String cardType);

    /**
     * 检测登录密码
     * password  传入的密码
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：remainCount 返回剩余验证次数
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult checkUserPassword(String password);

    /**
     * 验证随机数1密文并加密随机数2
     *
     * @param keyType   卡类型
     * @param meterNo   电表表号
     * @param esamNo    ESAM模块编号
     * @param enRandom1 电表返回的随机数1密文
     * @param random2   电表返回的随机数2
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：enRandom2 随机数2密文
     *                       :List<String> datas(code==其他): size==0
     */
     ReturnResult checkRand1AndEncryptRand2(String keyType, String meterNo, String esamNo, String enRandom1,String random2);

    /**
     * 下装安全单元权限
     *
     * @param taskSign      任务标识
     * @param authorityData 权限数据
     * @param protectCode   权限数据保护码
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult downWorkCardKeyCiphertext(String taskSign, String authorityData, String protectCode);

    /**
     * 获取远程身份认证数据
     *
     * @param meterNo 电表表号
     * @param keyType 密钥类型
     * @param cipher  密文数据
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：random1 随机数1
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult remoteAuthentication(String meterNo, String keyType);

    /**
     * 获取卡片序列号
     *
     * @param cardType 卡片类型
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：serialNo 序列号
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getSerialNo(String cardType);

    /**
     * 获取操作员信息
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：name    姓名
     *                                              1：company 公司
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult getOperatorInfo();
    /**
     * 加密随机数
     *
     * @param random   随机数
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：randomEn 加密后的随机数
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult encryptRandom(String random);

    /**
     * 解密随机数密文
     *
     * @param cipher 随机数密文
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：random 解密后的随机数
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult decryptRandom(String cipher);

    /**
      * 获取电表控制命令密文
      *
      * @param taskSign      任务标识
      * @param random2       远程认证时电表返回的随机数2
      * @param esamNo        远程认证时电表返回的ESAM编号
      * @param meterNo       电表表号
      * @param taskData      任务数据
      * @param protectCode   任务数据保护码
      * @param controlCmd    控制数据
      * @param timeLimit     任务有效期
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：enControlData 控制命令密文
     *                       :List<String> datas(code==其他): size==0
      */
     ReturnResult getRemoteControlData(String taskSign, String random2, String esamNo, String meterNo,
                                         String taskData, String protectCode, String controlCmd, String timeLimit);

    /**
     * 计算保护码
     *
     * @param taskSign    任务标识
     * @param data        待计算数据
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：protectCode 计算保护码结果
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult computeProtectCode(String taskSign, String data);

    /**
     * 计算参数设置任务数据
     *
     * @param taskSign    任务标识
     * @param random2     电表远程身份认证返回的随机数
     * @param esamNo      电表远程身份认证返回的ESANNo
     * @param meterNo     电表表号
     * @param taskData    任务数据明文
     * @param protectCode 任务数据保护码
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：cipherData  任务数据密文
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getSetData(String taskSign, String random2, String esamNo, String meterNo, String taskData,
                          String protectCode);
    /**
     * 计算充值任务数据
     *
     * @param taskSign    任务标识
     * @param random2     电表远程身份认证返回的随机数
     * @param esamNo      电表远程身份认证返回的ESAMNo
     * @param meterNo     电表表号
     * @param taskData    任务数据明文
     * @param protectCode 任务数据保护码
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：cipherData  任务数据密文
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getChargeData(String taskSign, String random2, String esamNo, String meterNo, String taskData,
                             String protectCode);
    /**
     * 计算时钟设置命令
     *
     * @param taskSign   任务标识
     * @param random2    电表远程身份认证返回的随机数
     * @param esamNo     电表远程身份认证返回的ESAMNo
     * @param meterNo    电表表号
     * @param taskData   任务数据明文
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：cipherData  任务数据密文
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getClockData(String taskSign, String random2, String esamNo, String meterNo, String taskData);

    /**
     * 修改操作员密码
     *
     * @param oldPassword 原密码
     * @param newPassword 新密码
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult changePassword(String oldPassword, String newPassword);

    /**
     * 计算传输MAC
     *
     * @param data    待计算数据
     * @param randomM 主站身份认证时返回的随机数M
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：mac     计算MAC结果
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult computeMac(String data, String randomM);

    /**
     * 验证传输MAC
     *
     * @param randomM 主站身份认证时返回的随机数M
     * @param data    待计算数据
     * @param mac     已有传输MAC
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：result  验证结果
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult checkMac(String randomM, String data, String mac);

    /**
     * 获取安全单元固件版本
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：version 固件版本信息
     *                       :List<String> datas(code==其他): size==0
     *
     */
    ReturnResult getVersion();

    /**
     * 查询卡计数机器
     *
     * @param cardType 卡片类型
     * @param index    索引目录
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：result 返回查询结果
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult queryIndexCount(String cardType, String index);

    /**
     * 修改卡计数机器
     *
     * @param cardType 卡片类型
     * @param index    索引目录
     * @param count    计数次数
     * @param mac      传输MAC
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult changeCount(String cardType, String index, String count, String mac);

    /**
     * 获取密钥更新任务数据
     *
     * @param taskSign    任务标识
     * @param random2     电表远程身份认证返回的随机数
     * @param esamNo      电表远程身份认证返回的ESAMNo
     * @param meterNo     电表表号
     * @param taskData    密钥任务明文数据
     * @param protectCode 任务数据保护码
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：cipherData  密钥更新任务密文数据
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getKeyData(String taskSign, String random2, String esamNo, String meterNo, String taskData,
                          String protectCode);

    /**
     * 对比随机数1密文并加密随机数2
     * 用户掌机红外认证升级方案（无任务数据直接进行红外人认证）
     *
     * @param keyType       密钥类型
     * @param meterNo       电表表号
     * @param esamNo        ESAMNo
     * @param random1Cipher 随机数1密文
     * @param random2       随机数2
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：random2Cipher 随机数2密文
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult commonCheckRand1AndEncryptRandom(String keyType, String meterNo, String esamNo,
                                                String random1Cipher, String random2);

    /**
     * 安全单元固件升级
     *
     * @param fileName 固件文件绝对路径
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult fileUpdate(String fileName);

    /**
     * 获取操作员卡类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：userCardType 返回操作员卡类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getUserCardType();

    /**
     * 获取业务卡类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：workCardType 返回业务卡类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getWorkCardType();

    /**
     * 获取公钥类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：publicKeyType 返回公钥类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getPublicKeyType();

    /**
     * 获取私钥类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：privateKeyType 返回私钥类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getPrivateKeyType();

    /**
     * 获取红外权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：infraAuthorityType 返回红外权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getInfraAuthorityType();

    /**
     * 获取控制权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：controlAuthorityType 返回控制权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getControlAuthorityType();

    /**
     * 获取1类参数权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：params1AuthorityType 返回1类参数权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getParam1AuthorityType();

    /**
     * 获取2类参数权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：params2AuthorityType 返回2类参数权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getParam2AuthorityType();

    /**
     * 获取第一套费率设置权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：rate1AuthorityType 返回第一套费率设置权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getRate1AuthorityType();

    /**
     * 获取第二套费率设置权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：rate2AuthorityType 返回第二套费率设置权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getRate2AuthorityType();

    /**
     * 获取充值权限类型
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:
     *                                              0：chargeAuthorityType 返回充值权限类型
     *                       :List<String> datas(code==其他): size==0
     */
    ReturnResult getChargeAuthorityType();


}
